package com.atwisdom.star.core.dao.pojo.modelClass.hier;

import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class HierPropertiesUtils {
    private String type;
    private String className;
    private String model;
    private List<HierModel> hierModels;

    public HierPropertiesUtils(List<HierModel> hierModels) {
        if (hierModels != null && hierModels.size() > 0) {
            HierModel hierModel = hierModels.get(0);
            this.type = hierModel.getType();
            this.className = hierModel.getClassName();
            this.model = hierModel.getModel();
            this.hierModels = hierModels;
        }
    }

    public JSONObject fetchHierProperties() {
        if (hierModels == null || hierModels.size() <1) {
            return new JSONObject();
        }

        if ("list".equalsIgnoreCase(this.type)) {
            return fetchListHierProperties();
        } else {
            return fetchOtherHierProperties();
        }
    }

    private JSONObject fetchListHierProperties() {
        HierModel hierModel = this.hierModels.get(0);
        //构造link
        JSONObject link = new JSONObject();
        link.put("linkId", hierModel.getLinkId());
        link.put("linkModel", hierModel.getLinkModel());
        link.put("linkClassName", hierModel.getLinkClassName());
        link.put("linkType", hierModel.getLinkType());
        //构造hierProperties
        JSONObject hierProperties = new JSONObject();
        hierProperties.put("model", hierModel.getModel());
        hierProperties.put("type", hierModel.getType());
        hierProperties.put("className", hierModel.getClassName());
        hierProperties.put("properties", hierModel.getProperties());
        hierProperties.put("statusProperties", hierModel.getStatusProperties());
        hierProperties.put("link", link);
        return hierProperties;
    }

    private JSONObject fetchOtherHierProperties() {
        JSONObject hierProperties = new JSONObject();
        hierProperties.put("model", this.model);
        hierProperties.put("type", this.type);
        hierProperties.put("className", this.className);
        List<JSONObject> contentList = new ArrayList<>();
        this.hierModels.forEach(hm -> {
            //构造link
            JSONObject link = new JSONObject();
            link.put("linkId", hm.getLinkId());
            link.put("linkModel", hm.getLinkModel());
            link.put("linkClassName", hm.getLinkClassName());
            link.put("linkType", hm.getLinkType());

            JSONObject content = new JSONObject();
            content.put("name", hm.getName());
            content.put("parentId",hm.getParentId());
            content.put("prev",hm.getPrev());
            content.put("nodeId", hm.getNodeId());
            content.put("nodeType", hm.getNodeType());
            content.put("properties", hm.getProperties());
            content.put("statusProperties", hm.getStatusProperties());
            content.put("link", link);
            contentList.add(content);
        });

        hierProperties.put("content", contentList);
        return hierProperties;
    }
}
